Software Transactional Memory (STM) একটি উন্নত কনকারেন্ট প্রোগ্রামিং কৌশল যা মাল্টি-থ্রেডেড বা কনকারেন্ট সিস্টেমে ডেটার নিরাপত্তা ও সঙ্গতি নিশ্চিত করে। STM, ডেটার স্থিতিশীলতা বজায় রেখে একাধিক থ্রেডের মধ্যে নিরাপদ ডেটা ম্যানিপুলেশন নিশ্চিত করতে সহায়ক। এটি একটি ট্রানজ্যাকশনাল মেমরি মডেল, যেখানে ডেটার পরিবর্তনগুলি একটি অ্যাটমিক ট্রানজ্যাকশন হিসেবে সম্পাদিত হয়, যার ফলে ডেটা অবস্থান সঠিক এবং সাংকেতিক থাকে।
STM এর মূল ধারণাটি হলো ডেটার একটি গোষ্ঠীকে একযোগে একটি একক পারফেক্ট ইউনিট হিসেবে পরিচালনা করা, যাতে একাধিক থ্রেড যখন একই ডেটাকে একসাথে পরিবর্তন করতে চায়, তখন ডেটার সঙ্গতি (consistency) বজায় থাকে।
STM মূলত এমন একটি সিস্টেম যেখানে ট্রানজ্যাকশন ব্যবহৃত হয়। একটি ট্রানজ্যাকশন হল ডেটার একটি নির্দিষ্ট সেটের উপর করা কিছু অপারেশন, যা সবগুলো সফলভাবে বা কোনোটিও না করা (atomicity) হয়। যদি একটি থ্রেড ট্রানজ্যাকশন চালানোর সময় কোনো সমস্যা হয়, তাহলে সেই পরিবর্তনগুলি বাতিল (rollback) করা হয় এবং ডেটা পূর্বাবস্থায় ফিরে যায়। STM কাজ করার জন্য নিম্নলিখিত উপাদানগুলো ব্যবহার করে:
ক্লোজারে STM ব্যবহারের জন্য ref
, dosync
, এবং alter
ফাংশনগুলো ব্যবহার করা হয়। ক্লোজারে STM ব্যবহার করার প্রধান উদ্দেশ্য হচ্ছে একাধিক থ্রেড দ্বারা একই ডেটার নিরাপত্তা এবং সঙ্গতি নিশ্চিত করা।
(def counter (ref 0))
(defn increment-counter []
(dosync
(alter counter inc)))
(defn decrement-counter []
(dosync
(alter counter dec)))
; দুইটি থ্রেড একসাথে চালানো
(future (increment-counter))
(future (decrement-counter))
@counter ; আউটপুট: 0 (যেহেতু increment এবং decrement একে অপরকে বাতিল করে)
ref
দ্বারা একটি reference তৈরি করা হয় যা একটি মিউটেবল ভ্যারিয়েবল ধারণ করে। এটি STM এর আওতায় থাকে, তাই একাধিক থ্রেড একই ডেটা পরিবর্তন করতে পারবে।dosync
একটি ট্রানজ্যাকশন ব্লক তৈরি করে, যাতে সব পরিবর্তনগুলো একত্রে করা হয়।alter
ফাংশনটি ref
এর মান পরিবর্তন করতে ব্যবহৃত হয় এবং এটি ট্রানজ্যাকশনাল প্রসেসে চলতে থাকে, যাতে নিরাপত্তা বজায় থাকে।ধরা যাক, আমরা একটি ব্যাংক অ্যাকাউন্টে টাকা জমা এবং তোলা করতে চাই, যেখানে একাধিক থ্রেড একই সময়ে কাজ করছে। STM এর মাধ্যমে আমরা এটা সুরক্ষিতভাবে করতে পারব।
(def account-balance (ref 1000))
(defn deposit [amount]
(dosync
(alter account-balance + amount)))
(defn withdraw [amount]
(dosync
(alter account-balance - amount)))
; দুটি থ্রেড একই সময়ে টাকা জমা এবং তুলবে
(future (deposit 500))
(future (withdraw 200))
@account-balance ; আউটপুট: 1300 (1000 + 500 - 200)
এখানে, একাধিক থ্রেড deposit
এবং withdraw
ফাংশন ব্যবহার করছে। STM ব্যবহারের মাধ্যমে, অ্যাকাউন্টের ব্যালেন্স নিশ্চিতভাবে সঠিক থাকে এবং একাধিক থ্রেড একে অপরকে ওভারল্যাপ বা সংঘর্ষ করতে দেয় না।
Software Transactional Memory (STM) একাধিক থ্রেডের মধ্যে সঠিকভাবে ডেটা পরিচালনা করার একটি শক্তিশালী কৌশল, যেখানে ট্রানজ্যাকশন ব্যবহার করে ডেটার সঙ্গতি এবং স্থিতিশীলতা বজায় রাখা হয়। STM এর প্রধান সুবিধা হলো ডেডলক, রেস কন্ডিশন এবং অন্যান্য কনকারেন্ট প্রোগ্রামিং সমস্যাগুলি এড়ানো। ক্লোজারে ref
, dosync
, এবং alter
ফাংশনগুলো ব্যবহার করে STM কার্যকরভাবে বাস্তবায়িত করা যায়।
common.read_more